home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
lib
/
rcscripts
/
net.modules.d
/
ifconfig
< prev
next >
Wrap
Text File
|
2006-04-25
|
9KB
|
334 lines
# Copyright (c) 2004-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header$
# Contributed by Roy Marples (uberlord@gentoo.org)
# Fix any potential localisation problems
# Note that LC_ALL trumps LC_anything_else according to locale(7)
ifconfig() {
LC_ALL=C /sbin/ifconfig "$@"
}
ifconfig_tunnel() {
LC_ALL=C /sbin/iptunnel "$@"
}
# void ifconfig_depend(void)
#
# Sets up the dependancies for the module
ifconfig_depend() {
after macchanger wireless
}
# bool ifconfig_check_installed(void)
#
# Returns 1 if ifconfig is installed, otherwise 0
ifconfig_check_installed() {
[[ -x /sbin/ifconfig ]] && return 0
${1:-false} && eerror "For ifconfig support, emerge sys-apps/net-tools"
return 1
}
# char* ifconfig_provides(void)
#
# Returns a string to change module definition for starting up
ifconfig_provides() {
echo "interface"
}
# char* ifconfig_module(void)
#
# Returns the module name
# This is needed by dhclient as we run different scripts
# based on the interface
ifconfig_module() {
echo "ifconfig"
}
# bool ifconfig_check_depends(void)
#
# Checks to see if we have the needed functions
ifconfig_check_depends() {
local f
for f in interface_variable; do
[[ $( type -t ${f} ) == function ]] && continue
eerror "ifconfig: missing required function ${f}\n"
return 1
done
return 0
}
# bool ifconfig_exists(char *interface, bool report)
#
# Returns 1 if the interface exists, otherwise 0
ifconfig_exists() {
local e=$( ifconfig -a | grep -o "^${1}" ) report=${2:-false}
[[ -n ${e} ]] && return 0
${report} && eerror "${1} does not exist"
return 1
}
# void ifconfig_up(char *iface)
#
# provides a generic interface for bringing interfaces up
ifconfig_up() {
ifconfig ${1} up &>${devnull}
}
# void ifconfig_down(char *iface)
#
# provides a generic interface for bringing interfaces down
ifconfig_down() {
ifconfig ${1} down &>${devnull}
}
# bool ifconfig_is_up(char *iface, bool withaddress)
#
# Returns 0 if the interface is up, otherwise 1
# If withaddress is true then the interface has to have an IPv4 address
# assigned as well
ifconfig_is_up() {
local check="\<UP\>" addr=${2:-false}
${addr} && check="\<addr:.*${check}"
ifconfig ${1} 2>${devnull} | grep -v Scope | xargs | grep -Eq "${check}" && return 0
return 1
}
# void ifconfig_set_flag(char *iface, char *flag, bool enabled)
#
# Sets or disables the interface flag
ifconfig_set_flag() {
local iface=${1} flag=${2} enable=${3}
${enable} || flag="-${flag}"
ifconfig ${iface} ${flag} &>${devnull}
}
# void ifconfig_loopback_create(void)
#
# Creates our loopback interface
ifconfig_loopback_create() {
ifconfig lo 127.0.0.1 up 2>/dev/null
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 \
gw 127.0.0.1 dev lo 2> /dev/null
}
# void ifconfig_get_address(char *interface)
#
# Fetch the address retrieved by DHCP. If successful, echoes the
# address on stdout, otherwise echoes nothing.
ifconfig_get_address() {
ifconfig ${1} | grep -m1 -o 'inet addr:[^ ]*' | cut -d: -f2
}
# void ifconfig_get_mac_address(char *interface)
#
# Fetch the mac address assingned to the network card
ifconfig_get_mac_address() {
ifconfig ${1} | grep -m1 -o 'HWaddr [^ ]*' | cut -d" " -f2
}
# void ifconfig_get_aliases_rev(char *interface)
#
# Fetch the list of aliases for an interface.
# Outputs a space-separated list on stdout, in reverse order, for
# example "eth0:2 eth0:1"
ifconfig_get_aliases_rev() {
ifconfig | grep -o "^${1}:[0-9]*" | tac | xargs
}
# bool ifconfig_interface_del_addresses(char *interface)
#
# Remove addresses from interface. Returns 0 (true) if there
# were addresses to remove (whether successful or not). Returns 1
# (false) if there were no addresses to remove.
ifconfig_del_addresses() {
local iface=${1} i
# We don't remove addresses from aliases
[[ ${iface} == *:* ]] && return 0
# If the interface doesn't exist, don't try and delete
ifconfig_exists ${iface} || return 0
# iproute2 can add many addresses to an iface unlike ifconfig ...
# iproute2 added addresses cause problems for ifconfig
# as we delete an address, a new one appears, so we have to
# keep polling
while ifconfig ${iface} | grep -q -m1 -o 'inet addr:[^ ]*' ; do
ifconfig ${iface} 0.0.0.0 || break
done
# Remove IPv6 addresses
for i in "$(ifconfig ${iface} | awk '$1=="inet6" && $4!="Scope:Link" {print $3}')"; do
/sbin/ifconfig ${interface} inet6 del ${i} &>/dev/null
done
return 0
}
# char* ifconfig_get_vars(char *interface)
#
# Returns a string spaced with possible user set
# configuration variables
ifconfig_get_vars() {
echo "config_${1} routes_${1} fallback_${1} ifconfig_${1} ifconfig_fallback_${1} routes_${1} inet6_${1} iface_${1} alias_${1} broadcast_${1} netmask_${1}"
# The depreciated gateway var has to be handled by
# each module if needed
}
# bool ifconfig_get_old_config(char *iface)
#
# Returns config and config_fallback for the given interface
ifconfig_get_old_config() {
local iface=${1} ifvar=$( interface_variable ${1} ) i inet6
eval config=( \"\$\{ifconfig_${ifvar}\[@\]\}\" )
eval config_fallback=( \"\$\{ifconfig_fallback_${ifvar}\[@\]\}\" )
eval inet6=( \"\$\{inet6_${ifvar}\[@\]\}\" )
# BACKWARD COMPATIBILITY: populate the config_IFACE array
# if iface_IFACE is set (fex. iface_eth0 instead of ifconfig_eth0)
eval local i=\"\$\{iface_${ifvar}\}\"
if [[ -n ${i} && -z ${config} ]]; then
# Make sure these get evaluated as arrays
local -a aliases broadcasts netmasks
# Start with the primary interface
config=( "${i}" )
# ..then add aliases
eval aliases=( \$\{alias_${ifvar}\} )
eval broadcasts=( \$\{broadcast_${ifvar}\} )
eval netmasks=( \$\{netmask_${ifvar}\} )
for (( i=0; i<${#aliases[@]}; i++ )); do
config[i+1]="${aliases[i]} ${broadcasts[i]:+broadcast ${broadcasts[i]}} ${netmasks[i]:+netmask ${netmasks[i]}}"
done
fi
# BACKWARD COMPATIBILITY: check for space-separated inet6 addresses
[[ ${#inet6[@]} == 1 && ${inet6} == *' '* ]] && inet6=( ${inet6} )
# Add inet6 addresses to our config if required
[[ -n ${inet6} ]] && config=( "${config[@]}" "${inet6[@]}" )
return 0
}
# bool ifconfig_iface_stop(char *interface)
#
# Do final shutdown for an interface or alias.
#
# Returns 0 (true) when successful, non-zero (false) on failure
ifconfig_iface_stop() {
# If an alias is already down, then "ifconfig eth0:1 down"
# will try to bring it up with an address of "down" which
# fails. Do some double-checking before returning error
# status
ifconfig_is_up $1 || return 0
ifconfig_down ${1} && return 0
# It is sometimes impossible to transition an alias from the
# UP state... particularly if the alias has no address. So
# ignore the failure, which should be okay since the entire
# interface will be shut down eventually.
[[ ${1} == *:* ]] && return 0
return 1
}
# bool ifconfig_post_start(char *iface)
#
# Bring up iface using ifconfig utilities, called from iface_start
#
# Returns 0 (true) when successful on the primary interface, non-zero
# (false) when the primary interface fails. Aliases are allowed to
# fail, the routine should still return success to indicate that
# net.eth0 was successful
ifconfig_post_start() {
local iface=${1} ifvar=$( interface_variable ${1} ) routes x
# Make sure interface is marked UP
ifconfig_up ${iface}
eval routes=( \"\$\{routes_${ifvar}\[@\]\}\" )
# BACKWARD COMPATIBILITY: set the default gateway
if [[ ${gateway} == ${iface}/* ]]; then
# We don't add the old gateway if one has been set in routes_IFACE
local gw=true
for x in "${routes[@]}"; do
[[ ${x} != "*default gw*" ]] && continue
gw=false
break
done
${gw} && routes=( "${routes[@]}" "default gw ${gateway#*/}" )
fi
[[ -z ${routes} ]] && return 0
# Add routes for this interface, might even include default gw
einfo "Adding routes"
eindent
for x in "${routes[@]}"; do
# Support iproute2 style routes
x=${x//via/gw}
ebegin "${x}"
# Support adding IPv6 addresses easily
if [[ ${x} == *:* && ${x} != *'-A inet6'* ]]; then
/sbin/route add -A inet6 ${x} &>${devnull}
else
/sbin/route add ${x} &>${devnull}
fi
eend $?
done
eoutdent
return 0
}
# bool ifconfig_add_address(char *iface, char *options ...)
#
# Adds the given address to the interface
ifconfig_add_address() {
local iface=${1} i=0
ifconfig_exists ${iface} true || return 1
# Extract the config
local -a config=( "$@" )
config=( ${config[@]:1} )
if [[ ${config[0]} == *:* ]]; then
# Support IPv6 - nice and simple
config[0]="inet6 add ${config[0]}"
else
# IPv4 is tricky - ifconfig requires an aliased device
# for multiple addresses
if ifconfig ${iface} | grep -v Scope | xargs | grep -Eq "\<addr:.*" ; then
# Get the last alias made for the interface and add 1 to it
i=$( ifconfig | tac | grep -m 1 -o "^${iface}:[0-9]*" | awk -F: '{ print $2 }' )
i=${i:-0}
(( i++ ))
iface=${iface}:${i}
fi
# Support iproute2 style config where possible
config=( "${config[@]//brd/broadcast}" )
config=( "${config[@]//peer/pointtopoint}" )
# ifconfig doesn't work with CIDR addresses
local cidr="${config[0]##*/}" ip="${config[0]%%/*}"
if [[ -n ${cidr} && ${cidr} != ${ip} ]]; then
local netmask=$( cidr2netmask "${cidr}" )
config[0]="${ip} netmask ${netmask}"
fi
fi
ifconfig ${iface} ${config[@]} &>${devnull}
eend $?
return $?
}